
/**
 * 获取目录对象或文件对象
 * @param {string} url 要操作文件或目录的URL地址
 * @returns {Promise<object>} 若成功返回请求到的目录或文件对象，否则返回 null
 */
export function resolveFile(url) {
    return new Promise(resolve => {
        // #ifdef APP-PLUS
        plus.io.resolveLocalFileSystemURL(url, resolve, () => resolve(null))
        // #endif

        // #ifndef APP-PLUS
        resolve(null)
        // #endif
    })
}

/**
 * 获取目录大小
 * @param {string} dir 目录地址
 * @returns {Promise<number>} 返回目录大小，单位字节
 */
export function getDirSize(dir) {
    return new Promise(async resolve => {
        // #ifdef APP-PLUS
        const entry = await resolveFile(dir)
        if (!entry) return resolve(0)
        entry.getMetadata(
            res => resolve(res.size || 0),
            () => resolve(0),
            true
        )
        // #endif

        // #ifndef APP-PLUS
        resolve(0)
        // #endif
    })
}

/**
 * 删除目录
 * @param {string} dir 目录地址
 * @returns {Promise<boolean>} 删除状态
 */
export function removeDir(dir) {
    return new Promise(async resolve => {
        // #ifdef APP-PLUS
        const entry = await resolveFile(dir)
        if (!entry) return resolve(false)
        entry.removeRecursively(
            () => resolve(true),
            () => resolve(false)
        )
        // #endif

        // #ifndef APP-PLUS
        resolve(false)
        // #endif
    })
}

/**
 * 格式化字节大小
 * @param {number} size 字节大小
 * @returns {string} 格式化后的文字
 */
export function formatSize(size) {
    const s = parseInt(size)
    if (s === 0) return '0B'
    else if (s < 1024) return s + 'B'
    else if (s < 1048576) return (s / 1024).toFixed(2) + 'KB'
    else if (s < 1073741824) return (s / 1048576).toFixed(2) + 'MB'
    else return (s / 1073741824).toFixed(2) + 'GB'
}
